﻿#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
//联合的成员是共⽤同⼀块内存空间的，这样⼀个联合变量的⼤⼩，⾄少是最⼤成员的⼤⼩（因为联合⾄少得有能⼒保存最⼤的那个成员）
//改变一个成员其他的成员也会改变
//联合类型的声明
union Un
{
	char c;
	int i;
};
union Un1
{
	char c[5];//5
	//1 8 1
	int i;//4 8 4
};
union Un2
{
	short c[7];//14
	//2 8 2
	int i;//4 8 4
};
union U
{
	int n;//4
	struct S
	{
		char c1;
		char c2;
		char c3;
		char c4;
	}s;//4
};
int main()
{
	//联合变量的定义
	union Un un = { 0 };
	printf("%p\n", &(un.i));
	printf("%p\n", &(un.c));
	printf("%p\n", &un);
	un.i = 0x11223344;
	un.c = 0x55;
	printf("%x\n", un.i);//改变一个成员其他的成员也会改变
	printf("%zd\n",sizeof(union Un1));//8
	printf("%zd\n", sizeof(union Un2));//16
	union U u = { 0 };
	u.n = 0x11223344;
	printf("%x %x %x %x\n", u.s.c1, u.s.c2, u.s.c3, u.s.c4);
	return 0;
}